import pandas as pd
from flask import Flask, render_template, request

from processing import load_models, predict

app = Flask(__name__)


@app.route('/', methods=['get', 'post'])  # 127.0.0.1:5000 + '/' = 127.0.0.1:5000/
def main():
    norm_res, min_max_scaler, gradient_boost = load_models()
    result = "Заполните все поля"
    if request.method == "POST":
        matrix = request.form.get("matrix")
        density = request.form.get("density")
        elastic_modul = request.form.get("elastic_modul")
        amount_hard = request.form.get("amount_hard")
        content_epoxy = request.form.get("content_epoxy")
        flash_point = request.form.get("flash_point")
        surface_density = request.form.get("surface_density")
        tensile_modulus = request.form.get("tensile_modulus")
        resin_consumption = request.form.get("resin_consumption")
        stripe_angle = request.form.get("stripe_angle")
        stripe_step = request.form.get("stripe_step")
        stripe_density = request.form.get("stripe_density")

        if stripe_angle == 90:  # Приведение угла нашивки к 1
            stripe_angle = 1
        # Приведем все переменные в датафрейм
        lst = [matrix, density, elastic_modul, amount_hard, content_epoxy, flash_point, surface_density,
               tensile_modulus, 3000, resin_consumption, stripe_angle, stripe_step, stripe_density]
        # Входной датафрейм содержит 13 колонок (одно значение оставляем по умолчанию для совместимости)
        # эту колонку удалим при работе с моделью, т.к. оно обучена без ее учета (колонка "Прочности на растяжение")
        df = pd.DataFrame(lst).transpose()
        norm_n = pd.DataFrame(norm_res.transform(df), columns=df.columns)
        minmax = pd.DataFrame(min_max_scaler.transform(norm_n), columns=df.columns)
        # Предсказание (удаляем искомую переменную)
        minmax_clean = minmax.drop(minmax.columns[[8]], axis=1, inplace=True)
        print(minmax_clean)
        tensile = predict(minmax, gradient_boost)
        result = "Прочности при растяжении, МПа: " + str(int(tensile))
        print(tensile)
    return render_template("index.html", message=result)


app.run(host='0.0.0.0')
